package sistema;

import controloBD.AcessoBD;
import controloBD.QueryResult;
import java.util.Hashtable;
import java.util.LinkedList;
import java.util.List;
import java.util.Vector;

public class Evento {

    private Long id_evento;
    private Long id_competicao;
    private Long id_equipa1;
    private Long id_equipa2;
    private String data;
    private double odd1;
    private double odd2;
    private double oddx;
    private double oddOver;
    private double oddUnder;
    private String estado;
    private String descricao;

    public Evento(Long id, Long id_competicao, Long id_equipa1, Long id_equipa2, String data,
            double odd1, double odd2, double oddx, double oddOver, double oddUnder, String estado, String descricao) {


        this.id_evento = id;
        this.id_equipa1 = id_equipa1;
        this.id_equipa2 = id_equipa2;
        this.data = data;
        this.odd1 = odd1;
        this.odd2 = odd2;
        this.oddx = oddx;
        this.oddOver = oddOver;
        this.oddUnder = oddUnder;
        this.id_competicao = id_competicao;
        this.estado = "ABERTO";
        this.descricao = descricao;


    }

    private Evento(Vector tabela) {

        this.id_evento = (Long) tabela.get(0);
        this.odd1 = (Double) tabela.get(1);
        this.odd2 = (Double) tabela.get(2);
        this.oddx = (Double) tabela.get(3);
        this.data = (String) tabela.get(4);
        this.oddOver = (Double) tabela.get(5);
        this.oddUnder = (Double) tabela.get(6);
        this.id_competicao = (Long) tabela.get(7);
        this.id_equipa1 = (Long) tabela.get(8);
        this.id_equipa2 = (Long) tabela.get(9);
        this.estado = (String) tabela.get(10);
        this.descricao = (String) tabela.get(11);




    }

    /**
     * @return the id_evento
     */
    public Long getId_evento() {
        return id_evento;
    }

    /**
     * @return the id_competicao
     */
    public Long getId_competicao() {
        return id_competicao;
    }

    /**
     * @param id_competicao the id_competicao to set
     */
    public void setId_competicao(Long id_competicao) {
        this.id_competicao = id_competicao;
    }

    /**
     * @return the id_equipa1
     */
    public Long getId_equipa1() {
        return id_equipa1;
    }

    /**
     * @param id_equipa1 the id_equipa1 to set
     */
    public void setId_equipa1(Long id_equipa1) {
        this.id_equipa1 = id_equipa1;
    }

    /**
     * @return the id_equipa2
     */
    public Long getId_equipa2() {
        return id_equipa2;
    }

    /**
     * @param id_equipa2 the id_equipa2 to set
     */
    public void setId_equipa2(Long id_equipa2) {
        this.id_equipa2 = id_equipa2;
    }

    /**
     * @return the data
     */
    public String getData() {
        return data;
    }

    /**
     * @param data the data to set
     */
    public void setData(String data) {
        this.data = data;
    }

    /**
     * @return the odd1
     */
    public double getOdd1() {
        return odd1;
    }

    /**
     * @param odd1 the odd1 to set
     */
    public void setOdd1(double odd1) {
        this.odd1 = odd1;
    }

    /**
     * @return the odd2
     */
    public double getOdd2() {
        return odd2;
    }

    /**
     * @param odd2 the odd2 to set
     */
    public void setOdd2(double odd2) {
        this.odd2 = odd2;
    }

    /**
     * @return the oddx
     */
    public double getOddx() {
        return oddx;
    }

    /**
     * @param oddx the oddx to set
     */
    public void setOddx(double oddx) {
        this.oddx = oddx;
    }

    /**
     * @return the oddOver
     */
    public double getOddOver() {
        return oddOver;
    }

    /**
     * @param oddOver the oddOver to set
     */
    public void setOddOver(double oddOver) {
        this.oddOver = oddOver;
    }

    /**
     * @return the oddUnder
     */
    public double getOddUnder() {
        return oddUnder;
    }

    /**
     * @param oddUnder the oddUnder to set
     */
    public void setOddUnder(double oddUnder) {
        this.oddUnder = oddUnder;
    }

    public String getEstado() {
        return estado;
    }

    public void setEstado(String estado) {
        this.estado = estado;
    }

    public static void encerraEvento(Long id_evento) throws Exception {
        Hashtable<String, String> dados = new Hashtable<String, String>();
        dados.put("var_idevento", id_evento.toString());
        dados.put("var_estado", "FECHADO");
        AcessoBD conexao = new AcessoBD();
        String qryName = new String("fecha_evento");
        conexao.executeUpdate(qryName, dados);
        conexao.closeBD();
    }

    public static void insere(Hashtable<String, String> params) throws Exception {
        // abre uma conexao a bd
        AcessoBD conexao = new AcessoBD();
        String qryName = new String("inserir_novo_evento");
        conexao.executeUpdate(qryName, params);
        conexao.closeBD();
    }

    public static List<Evento> devolveTodos() throws Exception {
        AcessoBD conexao = new AcessoBD();
        String qryName = new String("visualizar_todos");
        QueryResult qr = new QueryResult();
        qr = conexao.executeSelect(qryName, null);
        conexao.closeBD();

        return convertePaLista(qr);
    }

    public static List<Evento> devolveEventosModalidade(Long id_modalidade) throws Exception {

        AcessoBD conexao = new AcessoBD();
        Hashtable<String, String> dadosEvento = new Hashtable<String, String>();
        dadosEvento.put("var_idmodalidade", id_modalidade.toString());
        String qryName = new String("evento_por_id_modalidade");
        QueryResult qr = new QueryResult();
        qr = conexao.executeSelect(qryName, dadosEvento);
        conexao.closeBD();
        return (List<Evento>) new <List>Evento(qr.tabela());
    }

    public static Evento devolvePorIdModalidade(Long id_modalidade) throws Exception {

        AcessoBD conexao = new AcessoBD();
        Hashtable<String, String> dadosEvento = new Hashtable<String, String>();
        dadosEvento.put("var_idmodalidade", id_modalidade.toString());
        String qryName = new String("evento_por_id_modalidade");
        QueryResult qr = new QueryResult();
        qr = conexao.executeSelect(qryName, dadosEvento);
        conexao.closeBD();
        return new Evento(qr.tabela());
    }

    public static String jogoToString(Evento e) throws Exception {

        Equipa equipa1 = Equipa.devolveEquipa(e.getId_equipa1());
        Equipa equipa2 = Equipa.devolveEquipa(e.getId_equipa2());

        return "" + equipa1.getNome() + " VS " + equipa2.getNome();
    }

    public static List<Evento> convertePaLista(QueryResult qr) {

        List<Evento> eventos = new LinkedList<Evento>();
        if (!qr.tabela().isEmpty()) {
            int i = 0;
            while (i < qr.tabela().size()) {
                Long id = (Long) qr.tabela().get(i);
                Double odd1 = (Double) qr.tabela().get(i + 1);
                Double odd2 = (Double) qr.tabela().get(i + 2);
                Double oddx = (Double) qr.tabela().get(i + 3);
                String data = (String) qr.tabela().get(i + 4);
                Double oddover = (Double) qr.tabela().get(i + 5);
                Double oddunder = (Double) qr.tabela().get(i + 6);
                Long idcompeticao = (Long) qr.tabela().get(i + 7);
                Long idequipa1 = (Long) qr.tabela().get(i + 8);
                Long idequipa2 = (Long) qr.tabela().get(i + 9);
                String estado = (String) qr.tabela().get(i + 10);
                String descricao = (String) qr.tabela().get(i + 11);

                eventos.add(new Evento(id, idcompeticao, idequipa1, idequipa2, data, odd1, odd2, oddx, oddover, oddunder, estado, descricao));

                i = i + 12;
            }
            return eventos;
        }
        return null;
    }

    public static Evento devolvePorId(Long id_evento) throws Exception {
        AcessoBD conexao = new AcessoBD();
        Hashtable<String, String> dados = new Hashtable<String, String>();
        dados.put("var_idevento", id_evento.toString());
        String qryName = "devolve_evento_por_id";
        QueryResult qr = conexao.executeSelect(qryName, dados);
        conexao.closeBD();
        return new Evento(qr.tabela());
    }

    public static void altera(Hashtable<String, String> params) throws Exception {
        // abre uma conexao a bd
        AcessoBD conexao = new AcessoBD();
        String qryName = "altera_evento";
        conexao.executeUpdate(qryName, params);
        conexao.closeBD();
    }

    /**
     * @return the descricao
     */
    public String getDescricao() {
        return descricao;
    }

    /**
     * @param descricao the descricao to set
     */
    public void setDescricao(String descricao) {
        this.descricao = descricao;
    }

    public static List<Evento> devolveAbertos() throws Exception {
        AcessoBD conexao = new AcessoBD();
        String qryName = new String("devolve_abertos");
        QueryResult qr = new QueryResult();
        qr = conexao.executeSelect(qryName, null);
        conexao.closeBD();
        return convertePaLista(qr);
    }

    public static List<Evento> devolveTodosPorCompeticao(Long id_competicao) throws Exception {
        AcessoBD conexao = new AcessoBD();
        String qryName = new String("visualizar_todos_por_competicao");
        Hashtable<String, String> params = new Hashtable<String, String>();
        params.put("var_idcompeticao", id_competicao.toString());
        QueryResult qr = new QueryResult();
        qr = conexao.executeSelect(qryName, params);
        conexao.closeBD();

       return convertePaLista(qr);
    }

    public static List<Evento> devolveTodosPorModalidade(Long id_modalidade) throws Exception {
        AcessoBD conexao = new AcessoBD();
        String qryName = new String("visualizar_todos_por_modalidade");
        Hashtable<String, String> params = new Hashtable<String, String>();
        params.put("var_idmodalidade", id_modalidade.toString());
        QueryResult qr = new QueryResult();
        qr = conexao.executeSelect(qryName, params);
        
        return convertePaLista(qr);
    }
}
